package utils.array;

/**
 * 使用数组实现固定长度的栈
 */
public class Stack {
    // 存值的数组；
    private Object[] arr;
    // 栈顶部的索引；
    private int index;
    //初始化长度；
    private final int limit;

    // 构造方法初始化
    public Stack(int limit) {
        this.arr = new Object[limit];
        this.index = 0;
        this.limit = limit;
    }

    // 压栈操作
    public void push(Object value) {
        if (index == limit) {
            throw new RuntimeException("栈已经满了，不能再装了");
        }
        this.arr[index] = value;
        index++;
    }

    // 取栈顶元素；
    public Object pop() {
        if (index == 0) {
            throw new RuntimeException("栈已经空了，不能再取了");
        }
        index--;
        Object temp = this.arr[index];
        this.arr[index] = null;
        return temp;
    }

    // 栈为空判断
    public boolean isEmpty() {
        return index == 0;
    }
    // 取栈顶元素
    public Object peek(){
        if (index ==  0){
            throw new RuntimeException("栈已经空了，不能再取了");
        }
        return this.arr[index];
    }

    @Override
    public String toString() {
        String str = "";
        for (int i = 0; i < arr.length; i++) {
            str += arr[i] + ",";
        }
        return str;
    }
}
